package exception;

/**
 * 异常处理机制
 * try{
 *     A计划  正常的逻辑代码
 * }catch(XXXException){
 *     B计划  针对A计划中若执行过程出现了XXXException后的补救措施
 * }
 */
public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        try {
//            String line = null;
//            String line = "";
            String line = "abc";
            //如果line为null，JVM会在这里实例化对应的异常并抛出
            System.out.println(line.length());
            System.out.println(line.charAt(0));
            System.out.println(Integer.parseInt(line));
            //try语句块中某句代码出现异常后，剩余代码均不执行
            System.out.println("!!!!!!!!!!!!!!");
//        }catch(NullPointerException e){
//            System.out.println("出现了空指针，并解决了");
//        //catch可以定义多个，当try中出现不同异常并且都有对应的处理方案时要分别捕获
//        }catch(StringIndexOutOfBoundsException e){
//            System.out.println("出现了字符串下标越界，并解决了");
//        }
        }catch(NullPointerException|StringIndexOutOfBoundsException e){
            System.out.println("出现了空指针或下标越界异常，并解决了");
        /*
            捕获超类型异常，try出现出现它的子类型异常都可以被其捕获。
            多个catch则优先由上面可以出的catch执行
            因此，异常存在继承关系时，子类异常在上先捕获，超类异常在下后捕获
         */
        }catch(Exception e){
            System.out.println("反正就是出了个错！");
        }
        System.out.println("程序结束了");
    }
}
